package educar.actividad;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import educar.correccion.Correccion;
import educar.correccion.CorreccionNoEncontrada;
import educar.db.DbConnection;
import educar.db.JPA;
import educar.actividad.Actividad;

public class ActividadController {
	
	private static JPA jpa = new JPA();
	
	/**
	 * Retorna una instancia de la clase actividad obteniada de la base de datos
	 * dado el codigo de la materia.
	 * @param codigo
	 * @return actividad
	 * @throws ActividadNoEncontrada
	 */
	public static Actividad getActividadMat(String codigo)throws ActividadNoEncontrada{
	    ResultSet rs = null;
		Actividad actividad = null;
		rs = jpa.getByField("actividad", "cod_materia", codigo);
		try {
			if (rs.next()) {
				actividad = new Actividad (rs.getString(1), rs.getString(3),rs.getString(2));
			} else {
				throw new ActividadNoEncontrada();
			}
		} catch (SQLException e) {
				e.printStackTrace();
		}
		return actividad;
	}
	
	
	
	/**
	 * Retorna una instancia de la clase actividad obteniada de la base de datos
	 * dado el numero de actividad.
	 * @param codigo
	 * @return actividad
	 * @throws ActividadNoEncontrada
	 */

	public static Actividad getActividad(String codigo)throws ActividadNoEncontrada{
	    ResultSet rs = null;
		Actividad actividad = null;
		rs = jpa.getByField("actividad", "nro", codigo);
		try {
			if (rs.next()) {
				actividad = new Actividad (rs.getString(1), rs.getString(3),rs.getString(2));
			} else {
				throw new ActividadNoEncontrada();
			}
		} catch (SQLException e) {
				e.printStackTrace();
		}
		return actividad;
	}
	
	/**
	 * Este metodo nos permite agregar un materia en la base de datos, es decir agregar un 
	 * nuevo registro en la tabla materia.
	 * @param actividad
	 * @return
	 */
	public static boolean save(Actividad actividad) {
		try {
			getActividad(actividad.getCodMat());
			return false;
		} catch (ActividadNoEncontrada e1) {
			String[] columns = { "nro","descripcion","cod_materia"};
			PreparedStatement stm = jpa.newRecord(DbConnection.bd+".actividad", columns);
			try {
				stm.setString(1, actividad.getNroActividad());
				stm.setString(2, actividad.getDescr());
				stm.setString(3, actividad.getCodMat());
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			}
			jpa.create(stm);
			return true;
		}
	}
	
	/**
	 * Chequea la existencia de una actividad segun su codigo.
	 * @param codigo
	 * @return
	 */
	public static boolean existe (String codigo) {
		try {
			Actividad doc = getActividadMat(codigo);
			return true;
		} catch (ActividadNoEncontrada ex) {
			return false;
		}
	}
	
	/**
	 * Genera una consulta de la tabla actividad con las columnas que recibe como parametro,
	 * para luego ser mostrados en una tabla
	 * @param columnas
	 * @param id
	 * @param dni
	 * @return rs
	 */
	public static ResultSet listar (String columnas,String id,String dni){
		ResultSet rs = null;
		rs = jpa.listar("actividad",columnas, id,dni);
		return rs;
	}

	
}
